головне меню список тем тестування презентації історія створення

 

7.3. Процесори персональних комп'ютерів

Не дивлячись на те, що перший персональний комп'ютер був випущений фірмою Apple, зараз персональними комп'ютерами називають в основному IBM PC-сумісні комп'ютери. Це зв'язано, перш за все, з тим, що фірма IBM вибрала правильну ринкову політику: вона не приховувала принципів пристрою своїх комп'ютерів і не патентувала основних рішень. В результаті багато виробників стали випускати сумісні комп'ютери, і вони швидко сталі фактичним стандартом. Через великий об'єм випуску персональні комп'ютери почали швидко дешевшати. До того ж для IBM-сумісних персональних комп'ютерів стали розробляти безліч програмних засобів, що ще більше сприяло їх розповсюдженню. Тому, не дивлячись на деякі істотні архітектурні недоліки, IBM-сумісні персональні комп'ютери зараз упевнено займають перше місце на ринку.
Із самого початку фірма IBM орієнтувалася на процесори Intel. У цих процесорів були дуже могутні конкуренти, наприклад, процесори фірм Motorola або Zilog, що перевершували процесори Intel по багатьох параметрах, але саме завдяки персональним комп'ютерам процесори Intel змогли вийти переможцями в конкурентній боротьбі. До того ж ще деякі фірми (наприклад, AMD, VIA, Cyrix) випускають Intel-сумісні процесори. Тому ми розглянемо основні особливості процесорів фірми Intel. Це дозволить нам також прослідити основні тенденції в розвитку процесорів за останні десятиріччя.
Свій перший 16-розрядний процесор i8086 фірма Intel випустила в 1978 році. Він міг адресувати 1 Мбайт пам'яті (тобто мав 20-розрядну шину адреси), продуктивність його при тактовій частоті 5 Мгц складала 0,33 MIPS, але незабаром з'явилися процесори з тактовою частотою 8 і 10 Мгц. Трохи пізніше (через рік) була випущена спрощена версія процесора i8086 - i8088, який відрізнявся тільки 8-розрядною зовнішньою шиною даних. За рахунок цього він був повільніше, ніж i8086, на 20-60% при тій же тактовій частоті, та зате помітно дешевше. Саме на його основі був зібраний дуже популярний персональний комп'ютер IBM PC XT.
16-розрядний процесор i80286, випущений в 1982 році, був використаний в персональних комп'ютерах IBM PC AT. Принципово новим було в ньому те, що він міг адресувати до 16 Мбайт пам'яті і мав крім реального режиму, аналогічного i8086, ще і так званий захищений режим, що дозволяє більш гнучко управляти пам'яттю. Продуктивність цього процесора при тактовій частоті 8 Мгц складала 1,2 MIPS.
Важливим кроком стала поява в 1985 році повністю 32-розрядного процесора i80386, здатного адресувати до 4 Гбайт пам'яті (32-розрядна адресна шина). Він мав ще більш розвинену систему управління пам'яттю MMU (Memory Management Unit). Продуктивність його при тактовій частоті 16 Мгц складала 6 MIPS. З появою цього процесора стала бурхливо розвиватися операційна система MS Windows, істотно що змінила процес роботи з комп'ютерами типа IBM PC.
Ще одним принциповим кроком стало створення в 1989 році процесора Intel 486DX, в якому з'явилися вбудований математичний співпроцесор, що істотно прискорив виконання арифметичних операцій, і внутрішня кеш-пам'ять, прискорююча обмін з оперативною пам'яттю. Максимальний об'єм пам'яті цього процесора, що адресується, - 4 Гбайт. На тактовій частоті 25 Мгц продуктивність була 16,5 MIPS. Починаючи з процесором 486, набуло поширення так зване множення тактової частоти, тобто внутрішнє подвоєння і навіть почетверіння зовнішньої тактової частоти (позначається 486DX2, 486DX4).
В 1995 році з'явилися перші процесори Pentium, що відкрили новий етап в розвитку сімейства. Вони були 32-розрядними всередині, але мали 64-розрядну зовнішню шину даних. Принциповою відмінністю було використовування в них так званої суперскалярної архітектури, слідством чого стала більш висока швидкодія при тій же тактовій частоті, що і i486DX. При тактовій частоті 66 Мгц продуктивність процесора досягала 112 MIPS. В 1996 році тактова частота Pentium була доведена до 200 Мгц, а вартість знизилася настільки, що він став рядовим процесором персональних комп'ютерів сімейства IBM PC.
В 1997 році Pentium був доповнений технологією MMX, покликаною прискорювати виконання мультимедійних програм  (обробку зображень і звуку). І в цьому ж році з'явився процесор Pentium II, який включає технологію ММХ і має більш високу швидкодію. Можлива тактова частота досягла 400 Мгц.
Останніми роками з'явилися процесори Pentium III і Pentium IV, що мають ще більш розвинену архітектуру і тактову частоту, що перевищує 1 ГГц у Pentium III і 3 ГГц у Pentium IV.
Таким чином, співдружність компанії Intel і виробників IBM-сумісних персональних комп'ютерів успішно продовжується. Тому розглянемо трохи докладніше характерні особливості процесорів для персональних комп'ютерів цієї компанії.

7.3.1. Особливості процесорів 8086/8088

Опис мікропроцесорів фірми Intel ми почнемо з процесорів i8086/8088. Саме закладені в них архітектурні рішення багато в чому визначили архітектуру подальших моделей сімейства Intel, що підтримують сумісність з більш ранніми моделями. У тому числі і з недоліками і обмеженнями попередніх моделей.
Процесор i8086 має суміщену (мультиплексовану) 20-розрядну зовнішню шину адреси/данних. Дані передаються по 16 розрядам, адреса - по 20 розрядам. Шина управління має 16 розрядів (зокрема, в неї входять строб адреси і строби обміну з пам'яттю і пристроями вводу/виводу). Середній час виконання команди займає 12 тактів синхронізації, один цикл обміну по зовнішній шині вимагає 4 тактів (без урахування тактів очікування, що вводяться при асинхронному обміні). У процесора i8088 зовнішня шина даних 8-розрядна.
Одна з характерних особливостей процесорів i8086/8088 - принцип сегментації пам'яті. Тобто вся пам'ять представляється не у вигляді безперервного простору, а у вигляді декількох шматків - сегментів заданого розміру (по 64 Кбайта), положення яких в просторі пам'яті можна програмно змінювати. Про це вже мовилося в розділі 3.1.2 (див. мал. 3.5  і 3.6).
Процесор 8086/8088 має 14 регістрів розрядністю по 16 біт. Про їх призначення також вже мовилося в розділі 3.2.
Для прискорення вибірки команд з пам'яті в процесорі 8086 передбачений внутрішній 6-байтний конвейєр (в процесорі 8088 - 4-байтний). Конвейєр заповнюється читаними з пам'яті командами під час виконання попередньої команди і скидається (вважається порожнім) при виконанні будь-якої команди переходу (навіть якщо це команда переходу на наступну адресу).
Система команд процесора включає 133 команди, підтримуючі 24 методи адресації операндів. Таке велике число команд може розглядатися як гідність (можна гнучко вибирати команду, оптимально відповідну для кожного конкретного випадку), але воно ж помітно ускладнює структуру процесора.
Кожна команда містить 1, 2 або 4 байти коду команди, за якими можуть слідувати 1, 2 або 4 байти операнда.
В процесорі передбачені програмні і апаратні переривання, розділення зовнішньої шини з іншими процесорами або з контролером прямого доступу до пам'яті, а також можливість підключення математичного співпроцесора i8087, істотно збільшуючого продуктивність обчислень.
При старті процесора (по зовнішньому сигналу RESET) він переходить на адресу пам'яті FFFF0 і починає виконання програми, яка розміщується починаючи з цією адресою.
Процесор може обробляти 256 типів переривань: зовнішніх (апаратних), програмних і внутрішніх. Вектори переривань є подвійним словом (два слова по 16 розрядів), що визначає сегмент і зсув початкової адреси програми обробки переривань. Для векторів переривань відведена область пам'яті з адресами 00000.003FF. Внутрішні переривання виробляються при особливих ситуаціях:

  • переривання 0 відповідає переповнюванню при поділі на нуль;
  • переривання 1 виробляється після кожної команди при встановленому прапорі трасування TF в регістрі стану процесора (див. розділ 3.2);
  • переривання 4 виробляється по спеціальній команді INTO, якщо встановлений прапор переповнювання в регістрі стану процесора (це умовне переривання по переповнюванню).

Особливе місце займає немасковане переривання NMI (Non-Masked Interrupt), яке виробляється під час приходу зовнішнього сигналу NMI і не залежить від стану прапора дозволу апаратних переривань IF. В комп'ютері воно використовується для контролю парності пам'яті, контролю коректності обміну з пам'яттю і пристроями вводу/виводу, а також для обробки так званих виключень, тобто особливих умов, що виникають в процесі роботи. Немаскованим воно називається саме тому, що його не можна заборонити.
Важлива відмітна особливість процесора - розділення операцій обміну з пристроями вводу/виводу і з пам'яттю. Для обміну з пристроями вводу/виводу використовуються як окремі команди введення і виведення, так і спеціальні управляючі сигнали на шині управління. Адреси і дані як при обміні з пам'яттю, так і при обміні з пристроями вводу/виводу передаються по одних і тих же шинах. Але якщо для обміну з пам'яттю використовуються всі 20 розрядів шини адреси (адресується 1 Мбайт - адреси 00000 ... FFFFF), то в циклах обміну з пристроями вводу/виводу - тільки 16 розрядів шини адреси (адресується 64 Кбайта - адреси 00000 ... 0FFFF). Такий підхід має як свої переваги (наприклад, спрощення реалізації прямого доступу до пам'яті), так і недоліки (ускладнення системи команд, збільшення кількості управляючих сигналів).
Мікропроцесори i8086/8088 виконані у вигляді інтегральної мікросхеми в 40-вивідному корпусі. Відмінність в призначенні виводів мікросхеми між ними тільки одна: адреса в процесорі 8088 не мультиплексована з даними (передається по окремих лініях), а в процесорі 8086 – мультиплексована.
Процесор працює від одного джерела живлення напругою +5В і вимагає зовнішнього тактуючого сигналу з частотою, визначуваною номером моделі (від 4,77 Мгц до 10 Мгц).
Спеціальний управляючий сигнал MN/MX визначає мінімальний або максимальний режим роботи процесора. В мінімальному режимі процесор сам виробляє сигнали управління для зовнішньої шини. Цей режим використовується для побудови найпростіших систем. Для роботи у складі комп'ютера застосовується максимальний режим, при якому сигнали управління зовнішньою шиною виробляються спеціальною мікросхемою контролера шини i8288.

7.3.2. Особливості процесора 80286

Не дивлячись на те, що процесор 80286 залишився 16-розрядним, як і його попередник 8086, він був новим поколінням процесорів, що визначило його високу популярність і забезпечило персональному комп'ютеру на його основі (IBM PC AT) досить довге життя. Цей процесор відрізняється тим, що він має спеціальні засоби для роботи в розрахованих на багато користувачів і багатозадачних системах.
Найістотніша відмінність від процесора 8086/8088 - це механізм управління адресацією пам'яті, який забезпечує чотирьохрівневу систему захисту і підтримку віртуальної пам'яті. (Віртуальна пам'ять - це зовнішня пам'ять великого об'єму, з якою процесор може взаємодіяти як з своєю системною пам'яттю, але з деякими обмеженнями). Спеціальні засоби передбачені також для підтримки механізму перемикання задач (Task switching). Тобто процесор здатний виконувати декілька задач одночасно, перемикаючись час від часу між ними. В процесорі 80286 також розширена система команд за рахунок додавання команд управління захистом і декількох нових команд загального призначення.
Процесор 80286 може працювати в двох режимах:
Реальний режим (8086 Real Address Mode - режим реальної адресації), повністю сумісний з процесором 8086/8088. В цьому режимі можлива адресація тільки в межах 1 Мбайта фізичної пам'яті. Він використовується для забезпечення програмної спадкоємності з процесором 8086/8088.
Захищений режим (Protected Virtual Address Mode - захищений режим віртуальної адресації). В цьому режимі можлива адресація в межах 16 Мбайт фізичної пам'яті. Таке рішення пов'язано з необхідністю побудови комп'ютерів з великим об'ємом пам'яті, які забезпечували б підтримку складніших програм. В захищеному режимі система команд включає набір команд 8086, розширений для забезпечення апаратної підтримки багатозадачного режиму і віртуальної пам'яті.
Перемикання в захищений режим здійснюється однією командою (із заздалегідь підготовленими таблицями дескрипторів, що описують параметри режиму). Природно, це досить швидкий процес. Зворотне перемикання в реальний режим набагато складніше: воно можливе тільки через апаратне скидання процесора (по сигналу RESET), що вимагає набагато більше часу.
У складі комп'ютера під управлінням операційної системи MS DOS процесор 80286 працює в реальному режимі, а захищений режим використовують операційні системи типа UNIX, OS/2, NetWare286, а також операційні системи сімейства MS Windows. Докладніше за особливість цих режимів будуть розглянуті в наступному розділі.
Як і процесор 8086, 80286 має 16-розрядну зовнішню шину даних і 6-байтний конвейєр команд. Проте швидкодія процесора 80286 при тактовій частоті 12,5 Мгц приблизно в 6 разів вище, ніж у 8086 з тактовою частотою 5 Мгц. Це досягається за рахунок вдосконаленої архітектури і зниження кількості тактів на одну команду. Для прискорення виконання математичних операцій передбачено підключення до процесора 80286 мікросхеми математичного співпроцесора 80287.
Призначення внутрішніх регістрів процесора 80286 таке ж, як у процесора 8086/8088. Але в слові стану процесора (PSW) додано три розряди, що використовуються, і, крім того, з'явився ще один внутрішній регістр - регістр управління із словом стану машини (MSW - Machine State Word), в якому використовується тільки чотири біти (мал. 7.4).




Мал. 7.4. Формати регістрів ознак (PSW) і управління (MSW) процесора 80286.

Додаткові біти слова стану процесора PSW мають наступне призначення (докладніше про них - в наступному розділі):

  • IOPL (Input/Output Privilege Level) - два біти, визначаючі рівень привілеїв вводу/виводу;
  • NT (Nested Task flag) - прапор вкладеної задачі.
  • Регістр MSW управляє режимом процесора. Для зміни його вмісту і збереження його в пам'яті призначені спеціальні команди. Призначення його бітів наступне:
  • РЕ (Protection Enable) - дозвіл захисту. Установка цього прапора переводить процесор в захищений режим. Але очищення прапора не переводить в реальний режим (потрібне апаратне скидання процесора).
  • MP (Monitor Processor extension) - моніторинг зовнішнього математичного співпроцесора.
  • EM (Processor Extension Emulated) - емуляція математичного співпроцесора.
  • TS (Task Switch) - перемикання задач. Як і два попередні розряди, цей розряд управляє співпроцесором.

Поєднання MP=0 EM=0 TS=0, встановлюване по апаратному скиданню (по сигналу RESET), забезпечує сумісність з 8086/8088. Поєднання MP=1 EM=0 використовується при сумісному включенні із співпроцесором 80287, а поєднання MP=0 EM=1 застосовується у разі програмної емуляції співпроцесора, при якій функції співпроцесора виконуються основним процесором, але набагато повільніше.
Зупинимося докладніше на організації пам'яті процесора 80286. 24-розрядна зовнішня шина адреси дозволяє адресувати 16 Мбайт фізичної пам'яті, але в реальному режимі доступний тільки 1 Мбайт, що починається з нульової адреси (000000.0FFFFF). Так само, як і в 8086, застосовується сегментація пам'яті, але управління сегментацією в реальному і захищеному режимах різне.
В реальному режимі процесор 80286, на відміну від 8086, має засоби контролю переходу через межу сегменту. Наприклад, при спробі звернення до слова, що має зсув FFFF (його старший байт виходить за межу сегменту), або при виконанні команди, всі байти якої не уміщаються в даному сегменті, процесор виробляє спеціальне переривання - Segment Overrun Interrupt.
В захищеному режимі існують відмінності від 8086, визначення сегментів, що стосуються:
Сегментні регістри CS, DS, SS і ES бережуть не самі базові (початкові) адреси сегментів, а селектори, визначаючі адреси в пам'яті, по яких зберігаються дескриптори (описувачі) сегментів. Область пам'яті з дескрипторами називається таблицею дескрипторів.
Кожний дескриптор сегменту містить базову адресу сегменту, розмір сегменту (від 1 до 64 Кбайт) і його атрибути.
Базова адреса сегменту має розрядність 24 біт, що і забезпечує адресацію 16 Мбайт фізичної пам'яті.
Селектори, завантажувані в 16-бітові сегментні регістри, мають три поля: RPL (Requested Privilege Level) - запрошуваний рівень привілеїв, TI (Table Indicator) - індикатор використовування локальної або глобальної таблиці дескрипторів, INDEX - номер дескриптора в таблиці (формат показаний на мал. 7.5).




Мал. 7.5. Формат селектора сегменту процесора 80286.

Про порядок обчислення адреси пам'яті в захищеному режимі процесора 80286 вже мовилося в розділі 3.1.2 (див. рис.3.7). На суматор, що обчислює фізичну адресу пам'яті, подається не вміст сегментного регістра, а базова адреса сегменту з таблиці дескрипторів.
Дескриптори зберігаються в пам'яті і займають по чотири суміжні 16-розрядні слова (тобто 8 байт). При завантаженні нового значення селектора дескриптори прочитуються з пам'яті і зберігаються у внутрішніх програмно неприступних (і невидимих) регістрах процесора. До зміни значення селектора при зверненнях до пам'яті використовуються значення дескрипторів тільки з цих невидимих регістрів (їх називають кеш-регістрами).
В захищеному режимі команди вводу/виводу процесора є привілейованими. Це означає, що вони можуть виконуватися задачами тільки з певним рівнем привілеїв, визначуваних полем IOPL регістра ознак. Несанкціонована спроба виконання цих команд викликає переривання по порушенню захисту.
Як і 8086, процесор 80286 може обробляти до 256 типів переривань. Переривання підрозділяються на апаратні (масковані або немасковані), викликаються сигналами на входах процесора, програмні, викликаються командою INT, і виключення інструкцій. При цьому апаратні і програмні переривання працюють точно так, як і в 8086/8088.
Виключення інструкцій (Instruction Exceptions) або просто виключення трапляються при виникненні особливих умов при виконанні операцій (в 8086 аналогом виключень були внутрішні переривання процесора). Обробка виключень проводиться аналогічно обробці переривань.
Кожному номеру переривання відповідає свій елемент в таблиці дескрипторів переривань IDT (Interrupt Descriptor Table). В реальному режимі ця таблиця організована так само, як у 8086/8088, тобто містить подвійні слова, що визначають адресу початку процедур обробки переривань. В захищеному режимі таблиця містить 8-байтні дескриптори переривань. Її розмір може бути від 32 до 256 дескрипторів, і розташовуватися вона може в будь-якому місці пам'яті.
Система команд процесора 80286 включає, крім повного набору 8086, ряд додаткових команд, наприклад:

  • збереження константи в стеку, збереження в стеку і відновлення із стека всіх регістрів однією командою;
  • цілочисельне множення на константу;
  • зсуви (включаючи циклічні) на задану в константі кількість кроків;
  • вхід і вихід з процедур;
  • команди управління захистом.

Спроба виконання недійсної команди (або спроба виконання в реальному режимі команди, призначеної тільки для захищеного режиму) викликає спеціальне виключення.

Процесор 80286 випускався в 68-вивідних корпусах. Зовнішні шини адреси і даних були розділені. Напруга живлення процесора складає +5В.

7.3.3. Особливості процесора 80386

32-розрядний процесор i80386 відкрив новий етап в історії мікропроцесорів Intel і персональних комп'ютерів типа IBM PC. Природно, він зберігав повну сумісність з своїми 16-розрядними попередниками, щоб не відмовлятися від розробленого для них програмного забезпечення. Але саме в 80386 подолано жорстке обмеження на довжину безперервного сегменту пам'яті в 64 Кбайт, що було пережитком минулого і слідством не найвдаліших архітектурних рішень 8086.
В захищеному режимі 80386 довжина сегменту може досягати 4 Гбайт, тобто всього об'єму пам'яті, що фізично адресується. Таким чином, пам'ять фактично стала безперервною. Крім того, 80386 забезпечує підтримку віртуальної пам'яті об'ємом до 64 Тбайт (1 Тбайт = 1024 Гбайт). Вбудований блок управління пам'яттю підтримує механізми сегментації і сторінкової трансляції адрес (Paging). Забезпечується чотирьохрівнева система захисту пам'яті і вводу/виводу, а також перемикання задач.
Процесор 80386, як і 80286, може працювати в двох режимах:
Реальний режим, який повністю сумісний з 8086.
Захищений режим. В цьому режимі можлива адресація до 4 Гбайт фізичної пам'яті (32 розряди), через які при використовуванні механізму сторінкової адресації може відображатися до 16 Тбайт віртуальної пам'яті кожної задачі.
Перемикання між цими двома режимами в обидві сторони, на відміну від 80286, проводиться достатньо швидко, за допомогою простої послідовності команд, і апаратного скидання процесора не вимагається.
Процесор може оперувати з 8, 16, 32-бітовими операндами, рядками байт, слів і подвійних слів, а також з бітами, бітовими полями і рядками біт.
В архітектуру процесора введені засоби відладки і тестування.
Розрядність регістрів даних (АХ, BX, CX, DX) і адрес (SI, DI, BP, SP) збільшена до 32. При цьому в їх позначенні з'явилася приставка E (Extended - розширений), наприклад, EAX, ESI. Відсутність приставки в імені означає посилання на молодші 16 розрядів відповідного регістра. Регістри даних і адрес з'єднані в групу регістрів загального призначення, які іноді можуть замінювати один одного. Це може розглядатися як відхід від ідеології спеціалізації всіх регістрів.
Регістри селекторів залишені 16-розрядними, але додано два нові регістри FS і GS для завдання додаткових сегментів даних. Також розширений до 32 розрядів регістр-покажчик (лічильник)  команд EIP. 32-розрядним став і регістр прапорів EFLAGS. Його біти, визначені для 8086 і 80286, залишилися колишніми, але додано 6 нових біт (мал. 7.6). Такий же формат використовується і в процесорах 80486 і Pentium.



Мал. 7.6. Регістр ознак EFLAGS процесора 80386.

Регістри сегментів процесора містять 16-бітові покажчики (в реальному режимі) або селектори (в захищеному режимі) шести сегментів. З кожним з шести сегментних регістрів пов'язані програмно недоступні регістри дескрипторів, як і у випадку 80286. В захищеному режимі в регістри дескрипторів завантажується 32-бітова базова адреса сегменту, 32-бітовий ліміт і атрибути сегментів.
Крім згаданих регістрів до складу процесора входять ще чотири управляючі регістри (CR0, CR1, CR2, CR3), які бережуть ознаки стану процесора, загальні для всіх задач. В процесорі Pentium до них доданий ще і регістр CR4. Крім того, процесор містить ще системні адресні регістри для посилань на сегменти і таблиці в захищеному режимі, регістри відладки і регістри тестування. Як бачимо, від моделі до моделі кількість регістрів процесора постійно зростає.
Процесор дозволяє виділяти в пам'яті сегменти і сторінки. Сегменти в реальному режимі мають фіксований розмір, в захищеному - змінний. Сторінки, яких не було в попередніх моделях, є областями логічної пам'яті розміром 4 Кбайт, кожна з яких може відображатися на будь-яку область фізичної пам'яті. Якщо сегменти використовуються на прикладному рівні, то сторінки застосовуються на системному.
Стосовно пам'яті розрізняють три адресні простори: логічний, лінійний і фізичний. Про принципи адресації пам'яті у процесора 80386 вже мовилося в розділі 3.1.2 (див. мал. 3.8).
Процесор 80386 може використовувати режими 32-бітової або 16-бітової адресації. Режим 16-бітової адресації відповідає режимам процесорів 8086 і 80286, при цьому як компоненти адреси використовуються молодші 16 біт відповідних регістрів. Відмінність 32-бітової адресації відображена в табл. 7.1.
Так само, як і попередники, процесор 80386 обробляє всі види переривання: апаратні (масковані і немасковані) і програмні, які в даному випадку обробляються як різновид виключень, і власне виключення. Виключення підрозділяються на відмови, пастки і аварійні завершення.

 

  Таблиця 7.1. Відмінності режимів адресації 80386.                                  


Компонент адресація

16-бітна адресація

32-бітна

Базовий регістр

BX або BP

Будь-який 32-бітовий загального призначення

Індексний регістр

SI або DI

Будь-який 32-бітовий загального призначення, окрім ESP

Масштаб

Ні (завжди 1)

1,2, 4 або 8

Зсув

0, 8 або 16 біт

0, 8 або 32 біта

        

  • Відмова (Fault) - це виключення, яке виявляється і обслуговується до виконання команди, що викликає помилку.
  • Пастка (Trap) - це виключення, яке виявляється і обслуговується після виконання команди, що викликає це виключення. До класу пасток відносяться і програмні переривання.
  • Аварійне завершення (Abort) - це виключення, яке не дозволяє точно встановити команду, що викликала його. Воно використовується для повідомлення про серйозну помилку, такий як апаратна помилка або пошкодження системних таблиць.

Кожному номеру переривання (0.255) або виключення відповідає елемент в таблиці дескрипторів переривань IDT (Interrupt Descriptor Table). В захищеному режимі IDT може мати розмір від 32 до 256 дескрипторів, кожний з яких складається з 8 байт.
Відмінності від попереднього процесора 80286 у виконанні операцій вводу/виводу зводяться до додавання можливостей звернення до 32-бітових портів. Важливо відзначити, що рядкові команди процесора 80386 забезпечують блокове вводу/виводу з більшою швидкістю, ніж стандартний контролер прямого доступу до пам'яті.
Процесор випускався в 100-вивідному корпусі. Була передбачена можливість підключення зовнішнього співпроцесора 80387.
А зараз зупинимося трохи докладніше на захищеному режимі, який використовується на повну потужність саме починаючи з 32-розрядними процесорами, оскільки процесор 80286 мав істотні обмеження і в більшості випадків працював все-таки в реальному режимі.
Захищений режим був запропонований для забезпечення незалежності одночасного виконання декількох задач (як системних, так і прикладних). Для цього передбачений захист ресурсів кожної задачі від дій інших задач. Під ресурсами тут розуміється пам'ять з даними, програмами, системними таблицями, а також апаратура, що використовується задачею. Захист грунтується на сегментації пам'яті, причому, на відміну від реального режиму, задача не може перевизначати положення своїх сегментів в пам'яті і використовує тільки сегменти, визначені для неї операційною системою. Сегмент визначається дескриптором сегменту, який задає положення сегменту в пам'яті, його розмір (або ліміт), призначення і характеристики захисту.
Захист за допомогою сегментації не дозволяє:

  • використовувати сегменти не за призначенням, наприклад, потрактувати область даних як область програми;
  • порушувати права доступу (наприклад, намагатися записувати інформацію в сегмент, призначений тільки для читання, або звертатися до сегменту, не маючи достатніх привілеїв);
  • адресуватися до елементів, що виходять за межу сегменту;
  • змінювати дескриптори сегментів, не маючи достатніх привілеїв.
  • Захищений режим передбачає засоби перемикання задач. Стан кожної задачі (тобто стан всіх регістрів процесора) зберігається в спеціальному сегменті стану задачі, на який указує селектор в регістрі задачі. При перемиканні задачі достатньо завантажити в регістр задачі новий селектор, і стан попередньої задачі автоматично збережеться, а в процесор завантажиться стан нової (або раніше перерваної) задачі. Це розвиток ідеї стека.

В захищеному режимі передбачається ієрархічна чотирьохрівнева (рівні 0, 1, 2, 3) система привілеїв, призначена для управління виконанням привілейованих команд і доступом до дескрипторів (мал. 7.7). Рівень 0 відповідає необмеженим правам доступу і відводиться ядру операційної системи. Рівень 3 дає мінімальні права і відводиться прикладним задачам. Рівні привілеїв відносяться до дескрипторів, селекторів і задач. Крім того, в регістрі прапорів є двобітове поле привілеїв вводу/виводу, що управляє доступом до команд вводу/виводу і прапором переривань.
Механізм віртуальної пам'яті, що використовується в захищеному режимі, дозволяє будь-якій задачі використовувати логічний простір розміром до 64 Тбайт (16К сегментів по 4 Гбайта). Для цього кожний сегмент в своєму дескрипторі має спеціальний біт, вказуючий на присутність даного сегменту в оперативній пам'яті у нинішній момент. невживаний сегмент може бути вивантажений з оперативної пам'яті в зовнішню пам'ять (звичайно - на диск), про що робиться помітка в його дескрипторі. На місце, що звільнилося, із зовнішньої пам'яті може закачуватися інший сегмент (це називається свопінгом або підкачкою). При зверненні задачі до відсутнього в оперативній пам'яті сегменту виробляється спеціальне виключення, яке і виконує свопінг. З погляду виконуваної програми, віртуальна пам'ять нічим не відрізняється від реальної (говорять, що віртуальна пам'ять прозора), не рахуючи затримки на процес перекачування інформації на диск і з диска.


Мал. 7.7. Рівні привілеїв 32-розрядних процесорів.

Реальне використовування системи захисту і віртуальної пам'яті покладається на операційну систему, яка в ідеалі повинна забезпечувати працездатність навіть у разі некоректного виконання прикладних задач.
В пам'яті існує три типи таблиць дескрипторів: локальна таблиця дескрипторів LDT, глобальна таблиця дескрипторів GDT і таблиця дескрипторів переривань IDT. Кожній таблиці відповідає свій регістр процесора (відповідно, LDTR, GDTR і IDTR), де зберігаються дескриптори сегментів. Глобальна таблиця містить дескриптори, доступні всім задачам, а локальна може бути для кожної задачі своя. Дескриптори складаються з 8 байтів (як і у 80286). Проте призначення байтів різне. Для прикладу на мал. 7.8 показані формати дескрипторів сегменту програм і даних процесорів 80286 і 80386.
Існують також системні сегменти, призначені для зберігання локальних таблиць дескрипторів і таблиць стану задач. Їх дескриптори (теж 8-байтные) визначають базову адресу, ліміт сегменту, права доступу (читання, читання/запис, тільки виконання або виконання/читання) і присутність сегменту в оперативній пам'яті.

 

 



Мал. 7.8. Дескриптори сегментів програми і даних.

Задачі, дескриптори і селектори мають свої рівні привілеїв. Привілеї задач діють на виконання команд і використовування дескрипторів. Поточний рівень привілею задач визначається двома молодшими бітами регістра CS. Привілеї дескриптора описуються полем DPL (мал. 7.8). DPL визначає якнайменший рівень привілеїв, з яким можливий доступ до даного дескриптора. Привілеї селектора задаються полем RPL (див. мал. 7.5). Привілеї перевіряються при спробах запису в сегментні регістри, а також при виконанні деяких команд.

Таким чином, починаючи з процесором 80386, з'являються засоби обслуговування багатозадачного режиму. Природно, процесор не може обробляти декілька задач одночасно, виконуючи по декілька команд відразу. Він тільки періодично перемикається між задачами. Але з погляду користувача виходить, що комп'ютер паралельно працює з декількома задачами.

7.3.4. Особливості процесора 486

Процесор 486 є представником другого покоління 32-розрядних процесорів. Він зберігає основні принципи архітектури процесора 80386, а також забезпечує повну сумісність з своїми попередниками. Але в той же час він має ряд переваг.
В процесор введена внутрішня кеш-пам'ять 1-го рівня (Internal cache Level 1) розміром 8 Кбайт і передбачені засоби для дворівневого кешування.
В процесор введений математичний співпроцесор (в моделі процесора 486SX співпроцесор відсутній).
Підвищена продуктивність обміну по зовнішній шині - введені так звані пакетні цикли, що передають одне слово за один такт шини.
В архітектурі процесора застосовано швидкісне RISC-ядро, яке дозволяє команди, що часто зустрічаються, виконувати за один такт.
В структуру введені буфери відкладеного запису.
В окремих моделях передбачено внутрішнє множення тактової частоти (на 2, 2,5 або 3).
Все це забезпечило істотне збільшення швидкодії. А вдосконалений захищений режим дає деякі додаткові можливості.
Розглянемо докладніше принцип дії кеш-пам'яті.
Кеш-пам'ять (або просто кеш, від англ. Cache - склад, тайник) призначена для проміжного зберігання інформації з системної пам'яті з метою прискорення доступу до неї. Прискорення досягається за рахунок використовування більш швидкої пам'яті і більш швидкого доступу до неї. При цьому в кеш-пам'яті зберігається копія деякої області основної пам'яті, що постійно обновляється.
Необхідність введення кеша зв'язана з тим, що системна пам'ять персонального комп'ютера виконується на мікросхемах динамічної пам'яті, яка характеризується меншою вартістю, але і більш низькою швидкодією, в порівнянні із статичною пам'яттю. Ідея полягає в тому, що завдяки введенню швидкої буферної, проміжної статичної пам'яті можна прискорити обмін з повільною динамічною пам'яттю. По суті, кеш-пам'ять робить те ж, що і конвейєр команд, що застосовувався раніше, але на більш високому рівні. В кеш-пам'яті зберігається копія деякої частини системної пам'яті, і процесор може обмінюватися з цією частиною пам'яті набагато швидше, ніж з системною пам'яттю. Причому в кеш-пам'яті можуть зберігатися як команди, так і дані.
Виграш в швидкодії від вживання кеша зв'язаний з тим, що процесор в більшості випадків звертається до адрес пам'яті, розташованих послідовно, один за іншим, або ж близько один до одного. Тому висока вірогідність того, що інформація з цих адрес пам'яті виявиться усередині невеликої кеш-пам'яті. Якщо ж процесор звертається до адреси, розташованої далеко від тих, до яких він звертався раніше, кеш виявляється даремним і вимагає перезавантаження, що може навіть уповільнити обмін в порівнянні із структурою без кеш-пам'яті.
У принципі кеш-пам'ять може бути як внутрішньою (входити до складу процесора), так і зовнішньою. Внутрішній кеш називається кешем першого рівня, зовнішній - кешем другого рівня. Об'єм внутрішнього кеша звичайно невеликий - типове значення 32 Кбайт. Об'єм зовнішнього кеша може досягати декількох мегабайт. Але принцип функціонування у них один і той же.
Кеш першого рівня процесора 486 має чотирьохканальну структуру (мал. 7.9). Кожний канал складається з 128 рядків по 16 байт в кожній. Однойменні рядки всіх чотирьох каналів утворюють 128 наборів з чотирьох рядків, кожний з яких обслуговує свої адреси пам'яті. Кожному рядку відповідає 21-розрядна інформація про адресу скопійованого в неї блоку системної пам'яті. Ця інформація називається тегом (Tag) рядка.




Мал. 7.9. Структура внутрішнього кеша процесора 486.

Крім того, до складу кеша входить так званий диспетчер, тобто область пам'яті з організацією 128 х 7, в якій зберігаються 4-бітові теги дійсності (достовірності) для кожного з 128 наборів і 3-бітові коди LRU (Least Recently Used) для кожного з 128 наборів. Тег дійсності набору включає 4 біти достовірності кожного з 4 рядків, що входять в даний набір. Біт достовірності, встановлений в одиницю, говорить про те, що відповідний рядок заповнений; якщо він скинений в нуль, то рядок порожній. Біти LRU говорять про те, як давно було звернення до даного набору. Це потрібно для того, щоб обновляти набори, що якнайменше використовуються.
Адресація кеш-пам'яті здійснюється за допомогою 28 розрядів адреси. З них 7 молодших розрядів вибирають один з 128 наборів, а 21 старший розряд порівнюється з тегами всіх 4 рядків вибраного набору. Якщо теги співпадають з розрядами адреси, то виходить ситуація кеш-попадання, а якщо ні, то ситуація кеш-промаху.
У разі циклу читання при кеш-попаданні байт або слово читаються з кеш-пам'яті. При кеш-промаху відбувається оновлення (перезавантаження) одного з рядків кеш-пам'яті.
У разі циклу запису при кеш-попаданні проводиться запис як в кеш-пам'ять, так і в основну системну пам'ять. При кеш-промаху запис проводиться тільки в системну пам'ять, а оновлення рядка кеш-пам'яті не проводиться. Цей рядок стає недостовірним (його біт достовірності скидається в нуль).
Така політика запису називається сквозним або прямим записом (Write Through). В більш пізніх моделях процесорів застосовується і зворотний запис (Write Back), який є більш швидким, оскільки вимагає набагато меншого числа звертань по зовнішній шині.
При використовуванні зворотного запису в основну пам'ять записувана інформація відправляється тільки у тому випадку, коли потрібного рядка в кеші немає. У разі ж попадання модифікується тільки кеш. В основну пам'ять змінена інформація потрапить тільки при перезаписі нового рядка в кеш. Колишній рядок при цьому цілком переписується в основну пам'ять, і тим самим відновлюється ідентичність вмісту кеша і основної пам'яті.
У разі, коли необхідний рядок в кеші не представлений (ситуація кеш-промаху), запит на запис прямує на зовнішню шину, а запит на читання обробляється дещо складніше. Якщо цей запит відноситься до кешованої області пам'яті, то виконується цикл заповнення цілого рядка кеша (16 байт з пам'яті переписується в один з рядків набору, обслуговуючого дану адресу). Якщо дані, що необхідні процесору, не вміщаються в одному рядку, то заповнюється і сусідній рядок. Заповнення рядка процесор прагне виконати найшвидшим способом - пакетним циклом, проте зовнішній контролер пам'яті може зажадати використовування більш повільних пересилок.
Внутрішній запит процесора на дані задовольняється відразу, як тільки дані прочитуються з пам'яті, а подальше заповнення рядка може йти паралельно з обробкою даних. Якщо в наборі, який обслуговує дану адресу пам'яті, є вільний рядок, буде заповнена саме вона. Якщо ж вільних рядків немає, заповнюється рядок, до якого довше за всі не зверталися. Для цього використовуються біти LRU, які модифікуються при кожному зверненні до рядка даного набору.
Крім того, існує можливість анулювання рядків (оголошення їх недостовірними) і очищення всієї кеш-пам'яті. При сквозному  записі очищення кеша проводиться спеціальним зовнішнім сигналом процесора, програмним чином за допомогою спеціальних команд, а також при початковому скиданні - по сигналу RESET. При зворотному записі очищення кеша має на увазі також вивантаження всіх модифікованих рядків в основну пам'ять.
Відзначимо, що в просторі пам'яті персонального комп'ютера є області, для яких кешування принципово неприпустимо (наприклад, пам'ять апаратурних адаптерів, що розділяється, - плати розширення).
Режим пакетної передачі (Burst Mode), що вперше з'явився в процесорі 486, призначений для швидких операцій з рядками кеша. Пакетний цикл обміну (Burst Cycle) відрізняється тим, що для пересилки всього пакету адреса по зовнішній шині адреси передається тільки один раз - на початку пакету, а потім в кожному наступному такті передаються тільки дані. Адреса для кожного наступного коду даних обчислюється відносно початкової адреси за правилами, встановленими як передавачем даних, так і приймачем. Наприклад, адреса кожного наступного слова даних обчислюється як інкрементована  адреса попереднього. В результаті час передачі одного слова даних значно скорочується. Зрозуміло, що обмін пакетними циклами можливий тільки з пристроями, спочатку здатними обслуговувати такий цикл. Допустима довжина пакету не дуже велика, наприклад, при читанні розмір пакету обмежений одним рядком кеша.
Режим внутрішнього множення тактової частоти процесора був запропонований для того, щоб підвищити швидкодію процесора, але при цьому встановлювати його в системну плату, розраховану на невисокі тактові частоти. Наприклад, модель процесора 486DX2-66 працює в системній плати з тактовою частотою 33, але цю частоту процесор усередині себе перетворить в подвоєну частоту - 66 Мгц. Це дозволяє зменшити загальну вартість системи, оскільки знижує вимоги до елементів системної плати.

Процесор 486 випускався в 168- або 169-вивідних корпусах. Напруга живлення - 5 В або 3,3 В. Зниження напруги живлення до 3,3 В пов'язано з необхідністю зниження величини розсіюваної потужності. Тактова частота і ускладнення структури процесорів, призводять до того, що розсіювана ними потужність досягає декількох ватт. Для сучасних процесорів вже обов'язкове вживання вентиляторів на корпусі процесора.

7.3.5. Особливості процесорів Pentium

Процесори Pentium відносяться до п'ятого покоління процесорів або до третього покоління 32-розрядних процесорів. За своїми основними архітектурними принципами вони сумісні з процесорами 386 і 486. Але є істотні відмінності, що дозволяють говорити про нове покоління:

  • Суперскалярна архітектура процесора, тобто процесор має два п'ятиступінчатих  паралельно працюючих конвейєра обробки інформації, завдяки чому він здатний одночасно виконувати дві команди за один такт. Необхідно відзначити, що переваги такої архітектури виявляються тільки у разі спеціальної компіляції програмного забезпечення, що дозволяє здійснювати паралельну обробку.
  • Зовнішня 64-розрядна шина даних для підвищення продуктивності. Це вимагає відповідної організації пам'яті. Через таку особливість процесор іноді неправильно називають 64-розрядним (хоча всередині він все-таки залишився 32-розрядним). Зовнішня шина адреси процесора - 32-розрядна.
  • Вживання технології динамічного прогнозу розгалужень (переходів).
  • Роздільний кеш для команд і даних об'ємом 8 Кбайт кожний. Довжина рядка кеша - 32 байти. Обидва кеші працюють в режимі зворотного запису.
  • Підвищена в 2-10 разів в порівнянні з процесором 486 продуктивність вбудованого математичного співпроцесора. В ньому застосована восьмиступінчата конвейєризація і спеціальні блоки складання, множення і ділення, що дозволяє виконувати операції з плаваючою комою за один такт процесора.
  • Скорочений час (число тактів) виконання команд.
  • Передбачена можливість побудови двопроцесорних систем.
  • Введені засоби управління енергоспоживанням і тестування.

Прогноз розгалужень дозволяє продовжувати вибірку і декодування потоку команд після вибірки команди розгалуження (переходу), не чекаючи перевірки умови переходу. В колишніх моделях в даному випадку доводилося припиняти конвейєр. Динамічний прогноз грунтується на аналізі попередньої програми і накопиченні статистики поведінки. Виходячи з цього аналізу передбачається найвірогідніша умова кожного переходу, що зустрічається в програмі.
На додаток до базової архітектури 32-розрядних процесорів Pentium має набір регістрів MSR (Model Specific Registers). В нього входить група тестових регістрів (TR1 - TR12), засоби стеження за продуктивністю, регістри-фіксатори адреси і даних циклу, що викликав спрацьовування контролю машинної помилки. Назва цієї групи регістрів указує на їх унікальність для кожної моделі процесорів Pentium.
Засоби для стеження за продуктивністю (моніторингу продуктивності) включають таймер реального часу і лічильники подій. Таймер є 64-розрядним лічильником, що інкрементується  з кожним тактом процесора. Два лічильники подій мають розрядність по 40 біт і програмуються на підрахунок подій різних класів, пов'язаних з шинними операціями, виконанням команд, пов'язаних з роботою кеша, контролем точок зупинки і т.д. Порівнюючи стани таймера і лічильників подій, можна зробити висновок про продуктивність процесора.
Тестові регістри дозволяють управляти більшістю функціональних вузлів процесора, забезпечуючи можливість докладного тестування їх працездатності. Спеціальні біти регістра TR12 дозволяють відключити нові архітектурні властивості (прогноз і трасування галужень, паралельне виконання інструкцій), а також роботу первинного кеша.
Засоби для побудови двопроцесорних систем дозволяють на одній локальній шині встановлювати два процесори з об'єднанням майже всіх однойменних виводів. Це дає можливість використовувати симетричну мультипроцесорну обробку (SMP - Symmetric Multi-Processing) або будувати функціонально надмірні системи (FRC - Functional Redundancy Checking).
В режимі SMP кожний процесор виконує свою задачу, доручену йому операційною системою, що підтримується такими системами, як Novell NetWare, Windows NT, Unix. Обидва процесори розділяють загальні ресурси комп'ютера, включаючи пам'ять і пристрої вводу/виводу. В кожний момент шиною управляє один процесор, за певними правилами вони міняються ролями. В ідеальному випадку продуктивність системи збільшується удвічі (без урахування звернень до шини і часу на перемикання процесорів).
В конфігурації FRC два процесори виступають як один логічний процесор. Основний процесор (Master) працює в звичайному однопроцесорному режимі. Перевірочний процесор (Checker) виконує всі ті ж операції усередині себе, не управляючи зовнішньою шиною, і порівнює сигнали основного процесора з тими, які генерує сам. У разі неспівпадання формується сигнал помилки, оброблюваний як переривання. Тобто в даному випадку збільшується надійність системи в цілому (в ідеалі - удвічі).
Розвитком Pentium стало додавання технології MMX, розрахованої на мультимедійне, графічне і комунікаційне вживання. Основна ідея ММХ полягає в одночасній обробці декількох елементів даних за одну команду (SIMD, Single Instruction - Mutiple Data). Розширення ММХ використовує нові типи упакованих 64-бітових даних:

  • упаковані байти - вісім байт;
  • упаковані слова - чотири слова;
  • упаковані подвійні слова (два подвійні слова);
  • збільшене учетверо слово (одне слово).

Ці типи даних можуть оброблятися у восьми додаткових 64-розрядних регістрах MMX0 - MMX7. В систему команд для підтримки MMX введено 57 додаткових команд для одночасної обробки декількох одиниць даних (команди пересилки, арифметичні, логічні команди і команди перетворення форматів даних). Команди ММХ доступні з будь-якого режиму процесора.
Крім того, в процесорах Pentium ММХ збільшений об'єм кеша даних і програм (до 16 Кбайт кожний), збільшено число ступенів конвейєрів і введено ще декілька удосконалень, що підвищують продуктивність звичайних (не мультимедійних) операцій.
Від процесора Pentium Pro прийнято відлічувати шосте покоління процесорів. Pentium Pro в порівнянні з Pentium має наступні удосконалення:

  • Динамічне виконання команд припускає, що команди, не залежні від результатів попередніх операцій, можуть виконуватися в зміненому порядку, проте послідовність обміну із зовнішніми пристроями (пам'яттю і пристроями вводу/виводу) відповідатиме програмі. Тобто процесор сам вибирає зручний йому порядок виконання команд. Це дозволяє підвищити продуктивність процесора без збільшення тактової частоти.
  • Архітектура подвійної незалежної шини підвищує сумарну пропускну здатність. Одна шина (системна) служить для обміну з основною пам'яттю і пристроями вводу/виводу, а інша (локальна) призначена тільки для обміну з вторинним кешем (див. мал. 7.3).
  • В процесор введений кеш другого рівня об'ємом 256-512 Кбайт.
  • Можлива побудова багатопроцесорних систем (до чотирьох мікропроцесорів).

Процесор Pentium II поєднує в собі архітектуру Pentium Pro з технологією ММХ.
Розмір первинних кешів даних і команд складає 16 Кбайт, вторинного кеша - до 512 Кбайт. Кеш другого рівня дещо повільніший, ніж кеш першого рівня, зате він має більший об'єм. Така дворівнева організація дозволяє досягати компромісу між швидкодією кеш-пам'яті і її об'ємом.
Шина адреси має 36 розрядів (тобто максимально допустимий об'єм пам'яті - 64 Гбайта).
Процесори Pentium III і Pentium 4 відрізняються значно збільшеною граничною тактовою частотою (до 3 ГГц у Pentium 4, а в перспективі і до 5 ГГц), збільшеним об'ємом кеша (від 512 Кбайт до декількох мегабайт) і подальшим вдосконаленням архітектури Pentium. Розмір внутрішнього конвейєра у Pentium 4 доведений до 20 ступенів.
Вже з'явилися і повністю 64-розрядні процесори. Правда, повне використовування можливостей 64-розрядної архітектури зажадає істотну зміну програмного забезпечення.
Треба відзначити, що у складі персональних комп'ютерів практично ніколи не використовуються всі можливості процесорів сімейства Pentium. Наприклад, багатопроцесорні системи зустрічаються достатньо рідко, а об'єм системної пам'яті лише іноді перевищує 512 Мбайт.
Для портативних комп'ютерів були запропоновані спрощені версії процесорів Pentium III і Pentium 4, що продаються під маркою Celeron. Вони відрізняються зменшеною тактовою частотою і скороченим об'ємом кеша другого рівня. Їх тактова частота зараз доходить до 3 ГГц. Треба враховувати, що розсіювана потужність процесора Celeron залишається практично такою ж, як у процесорів Pentium III і Pentium 4.

 

 

попередня тема наступна тема